package com.jyw.common.utils;

import java.time.LocalDateTime;
import java.time.LocalTime;

/**
 * @author Created by ZhangCheng on 2024/01/11 (时间重合工具类)
 */
public class TimeOverlapUtil {

    public static void main(String[] args) {
        LocalTime time1Start = LocalTime.of(9, 0);
        LocalTime time1End = LocalTime.of(13, 0);
        LocalTime time2Start = LocalTime.of(12, 0);
        LocalTime time2End = LocalTime.of(17, 0);

        System.out.println("时间段1：" + time1Start + " - " + time1End);
        System.out.println("时间段2：" + time2Start + " - " + time2End);

        boolean overlap = checkLocalTime(time1Start, time1End, time2Start, time2End);
        System.out.println("是否存在重合：" + overlap);
    }

    /**
     * 判断时间是否重合
     *
     * @param start1
     * @param end1
     * @param start2
     * @param end2
     * @return
     */
    public static boolean checkLocalTime(LocalTime start1, LocalTime end1, LocalTime start2, LocalTime end2) {
        // 第一个时间段完全包含于第二个时间段内
        if (start1.isBefore(end2) && end1.isAfter(start2)) {
            return true;
        }
        // 第二个时间段完全包含于第一个时间段内
        else if (start2.isBefore(end1) && end2.isAfter(start1)) {
            return true;
        }
        // 没有重合
        else {
            return false;
        }
    }

    /**
     * 判断日期时间是否重合
     *
     * @param start1
     * @param end1
     * @param start2
     * @param end2
     * @return
     */
    public static boolean checkLocalDateTime(LocalDateTime start1, LocalDateTime end1, LocalDateTime start2, LocalDateTime end2) {
        // 第一个时间段完全包含于第二个时间段内
        if (start1.isBefore(start2) && end1.isAfter(end2)) {
            return true;
        }
        // 第二个时间段完全包含于第一个时间段内
        else if (start2.isBefore(start1) && end2.isAfter(end1)) {
            return true;
        }
        // 两个时间段交叉相连
        else if ((start1.isEqual(start2) || start1.isAfter(start2)) && (end1.isEqual(end2) || end1.isBefore(end2))) {
            return true;
        }
        // 没有重合
        else {
            return false;
        }
    }
}
